package com.kabuda.hot100.二叉树.medium;

import com.kabuda.hot100.二叉树.TreeNode;

/**
 * @author kabuda
 * @date 2025-03-11 18:07
 * @description 给你一个二叉树的根节点 root ，判断其是否是一个有效的二叉搜索树。
 * <p>
 * 有效 二叉搜索树定义如下：
 * 节点的左子树只包含 小于 当前节点的数。
 * 节点的右子树只包含 大于 当前节点的数。
 * 所有左子树和右子树自身必须也是二叉搜索树。
 */
public class t98_验证搜索二叉树 {
    public static void main(String[] args) {
        TreeNode treeNode1 = new TreeNode(5);
        TreeNode treeNode2 = new TreeNode(4);
        TreeNode treeNode3 = new TreeNode(6);
        TreeNode treeNode4 = new TreeNode(3);
        TreeNode treeNode5 = new TreeNode(7);
        treeNode1.left = treeNode2;
        treeNode1.right = treeNode3;

        treeNode3.left = treeNode4;
        treeNode3.right = treeNode5;

        System.out.println(isValidBST(treeNode1));
    }

    /**
     * 前序遍历
     *
     * @param root
     * @return
     */
    public static boolean isValidBST(TreeNode root) {
        return isValidBST(root, Long.MIN_VALUE, Long.MAX_VALUE);


    }

    public static boolean isValidBST(TreeNode root, long left, long right) {
        if (root == null) {
            return true;
        }

        int val = root.val;

        return val > left && val < right && isValidBST(root.left, left, val)&& isValidBST(root.right, val, right);
    }

}
